#include <iostream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "AbstractGraph.h"
#include "Graph.h"
#include "BipartiteGraph.h"
#include "Tree.h"
#include "SmallCover.h"
#include "Algorithms.h"
#include "Minisat.h"

using namespace std;

int main(int argc, char *argv[])
{
  if (argc < 2)
    {
      cout<<"Generation aleatoire des arbres"<<endl;
      cout<<"Usage: " <<argv[0]<<"<Arbre> <size>"<<endl;
      
      cout<<"Generation aleatoire des graphes"<<endl;
      cout<<"Usage: " <<argv[0]<<"<Graphe> <size> <prob>"<<endl;
      
      cout<<"Generation aleatoire des graphes bipartis"<<endl;
      cout<<"Usage: " <<argv[0]<<"<Graphe-Biparti> <size> <prob>"<<endl;
      
      cout<<"Generation aleatoire des graphes ayant une petite couverture"<<endl;
      cout<<"Usage: " <<argv[0]<<"<Graphe-Couverture> <size> <size cover> <prob>"<<endl;

      cout<<"Graphe ou Arbre a partir d'un fichier"<<endl;
      cout<<"Usage: " <<argv[0]<<"<fichier>"<<endl;
      exit (1) ;
    }
  
  
  if (strcmp(argv[1],"Arbre")==0){
    Tree t(atoi(argv[2]));
    cout<< "Arbre " << endl <<t.toString()<<endl;
    cout<< "Il est sauvegarde dans fichier.txt"<<endl;
    t.writeFile("fichier"); 
  }
  
  else if(strcmp(argv[1],"Graphe")==0){
    Graph g(atoi(argv[2]),atof(argv[3]));
    cout<< "Graphe " << endl <<g.toString()<<endl;
    cout<< "Il est sauvegarde dans fichier.txt"<<endl;
    g.writeFile("fichier"); 
  }
  
  else if(strcmp(argv[1],"Graphe-Biparti")==0) {
    BipartiteGraph g(atoi(argv[2]),atof(argv[3]));
    cout<< "Graphe Biparti" << endl <<g.toString()<<endl;
    cout<< "Il est sauvegarde dans fichier.txt"<<endl;
    g.writeFile("fichier"); 
  }
  
  else if(strcmp(argv[1],"Graphe-Couverture")==0) {
    SmallCover g(atoi(argv[2]), atoi(argv[3]), atof(argv[4]));
    cout<< "Graphe avec une petite couverture " << endl <<g.toString()<<endl;
    cout<< "Il est sauvegarde dans fichier.txt"<<endl;
    g.writeFile("fichier"); 
  }

  else if(strcmp(argv[1],"fichier")==0) {
    AbstractGraph g;
    g.readFile(argv[1]);
    cout<< endl <<g.toString()<<endl;
  }
  
  return 0;
}
